24 תשובות
כתבתי את זה, אבל יש בזה שתי בעיות (1 - תהיה שגיאה אם המשתנה בפרמטר לא מוגדר. 2 - משום מה זה לא עובד לי. לא מצאתי את הבעיה.):
if (is_object($a))
$a = get_object_vars($a);
if (!(sizeof($a) == 0)) {
foreach ($a as $value) {
if (is_object($value) || is_array($value))
e($value);
else {
if (!empty($value))
return false;
}
}
}
else {
return true;
}
}
$bla = array();
$bla[0] = array();
$bla[0][0] = array();
if (e($bla))
echo "bla";
א. לא הבנתי מה זאת אומרת לבדוק שאין כל הערכים ב stdClass הם false.
אולי הכוונה למאפיינים? אם כן, התשובה לשאלה שלך תהיה:
ב. אתה כנראה עושה משהו לא נכון.
יש לך בעיה, המצאת לה איזה פתרון מוזר ועכשיו אתה שואל איך לממש אותו.
אין באמת אף סיבה לעבור כל המאפיינים של stdClass. אם אתה מאוד רוצה, צור מחלקה מסוג מסוים כלשהו שתהיה לה רשימת מאפיינים שהיא בעצמה תבדוק. אבל שוב פעם, לי, כרגע, זה נשמע כמו נסיון לממש פתרון לא נכון לבעיה כלשהי.
כן, התכוונתי למאפיינים כנראה.
מה שרציתי לעשות זה לכתוב פונקציה שלוקחת אובייקט/מערך בתור פרמטר, ומחזירה:
true - אם באובייקט/מערך אין אובייקטים/מערכים/מאפיינים/ערכים בכלל, או שיש, אבל יש בהם false וכדו' (כמו ()empty על כל מאפיין/ערך).
false - להפך.
בשביל מה אתה צריך פונקציה כזו?
סתם בשביל התרגול? תתרגל. תנסה עוד פעם. אתה בכיוון. אם נכתוב לך את התשובה זה יאבד את הפואנטה
כי יש לי מערך רב ממדי בשם $errors, שאני מכניס אליו כל מיני שגיאות, כמו שגיאות בטפסים.
במקום שזה יהיה מערכים, רציתי לעשות את זה אובייקטים... ואני צריך מדי פעם לבדוק אם אובייקט/מאפיין מוגדר והוא לא מכיל false או מאפיין שמכיל false וכדו', אז חשבתי לכתוב פונקציה שתעשה לי את זה. ואם כבר אני כותב את זה, למה שהפונקציה הזאת לא תעשה את זה גם למערכים? (כי גם ככה זה ממיר את האובייקט למערך...)
בהחלט. אני אנסה שוב. :)
למה אתה רוצה להחליף את המערך באובייקט?
אתה מבין את ההבדל ביניהם ולמה כל אחד מהם מיועד?
הקישור הזה לא עונה על השאלה למה להחליף מערך של מחרוזות באובייקט עם מספר לא ברור של מאפיינים שיכולים להיות ויכולים לא להיות.
json_encode עובד יופי גם על מערכים.
אבל אני רוצה להמשיך להרחיב את ה-JSON אחרי שאני יוצר אותו, ולא ליצור בהתחלה סט מערכים ולהמיר אותם ל-JSON.
o.O
תרחיב את המערך כמה שאתה רוצה ובסוף תפעיל עליו json_encode
אני לא מבין את הבעיה (הפסיכולוגית?) של זה.
אני משנה אותו לכל אורך הסקריפט... אני לא יכול כל שנייה לשנות אותו ל-JSON, ואז למערך ואז שוב ל-JSON.
אם כי כשחושבים על זה, אני מניח שעדיף לי להישאר עם מערכים במקום עם אובייקטים כאן; שיניתי לגמרי את הפונקציה, ואני חושב שאני קרוב לסיום, אבל זה יצא ארוך מכדי לשמש כפונקציה שאשתמש בה לעתים קרובות (זה כולל פונקציית עזר שמצאתי ברשת).
עד סוף הסקריפט אתה ממשיך או עם אובייקט או עם מערך.
פעם אחת בסוף הסקריפט אתה מפעיל על זה את json_encode והופך את האובייקט או המערך שלך למחרוזת.
אני לא רואה שום סיבה למה שתעשה את כל הסיפור הזה עם אובייקט ולא עם מערך.
ואז אני כבר לא יכול להשתמש בו בצורת אובייקט, כי הסקריפט נגמר. :)
זה לא שאני רוצה לשלוח אותו ב-AJAX או משהו כזה.
בסוף הסקריפט - זה בסוף הסקריפט.
אם אתה עדיין רוצה להשתמש בו בתור לא משנה מה, זה עוד לא סוף הסקריפט.
כנראה שאין טעם לשאול מה הקשר של json לכל הסיפור הזה אם אתה לא מתכנן לשלוח את זה לדפדפן. כי גם לך אין באמת מושג. נכון ?
אתה רוצה לעשות את זה כאובייקט ?
אתה יכול להשתמש בArrayObject ואז פשוט לגשת אל זה כמו סינטקס של אובייקט .
לא ידעתי שזה קיים. :)
תודה. ^^
אבל עדיין יש את הבעיה שמבחינת הפונקציה empty, אובייקט וכל שכן אובייקט שמכיל אובייקט, גם אם הם ריקים או מכילים false וכדו' - הוא יחזיר false אם יש אותם.
אין לי תשובה טובה לשאלה "למה אני לא מצליח לחצות את המדבר על אופניים".
בכל מקרה, אם מישהו רוצה, כתבתי פונקציית empty שמקבלת יותר מפרמטר אחד. אם יש פרמטר שהוא מערך או אובייקט, השיטה אצלו מעט שונה מ-empty רגיל, בכך שגם מערך דו ממדי (כנ"ל לגבי אובייקטים) נחשב empty, ולא רק מערך חד ממדי (ובמקרה הזה גם אובייקט).
הבדל נוסף בין הפונקציה הזו ל-empty: אם חלק מהפרמטרים לא הוגדרו - יש שגיאה... (מה שמבחינתי די הורס את הפונקציה הזו. :-))
$args = func_get_args();
foreach ($args as $arg) {
if (is_object($arg) || is_array($arg)) {
if (is_object($arg))
$arg = get_object_vars($arg);
foreach ($arg as $value) {
if (is_object($value))
$value = get_object_vars($value);
if (!empty($value))
return false;
}
}
else if (!empty($arg))
return false;
}
return true;
}